import org.junit.jupiter.api.Test;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class Hello {
        /**
         * 2.通配符的使用
         * 通配符：？
         *
         * 类A是类B的父类，G<A>和G<B>是没有关系的，二者共同的父类是：G<?>
         */
        @Test
        public void test3(){
            List<Object> list1 = new ArrayList<>();
            List<String> list2 = new ArrayList<>();

            //通配符集合可以作为其他任何集合的父类
            List<?> list = new ArrayList<>();
            ArrayList<?> list3 = new ArrayList<>();

            list2.add("1");
            list2.add("2");
            list2.add("3");
            list2.add("4");

//            list.add(1);  //不能直接操作通配符集合，只能通过其子类来赋值
            list.add(null); //但是null可以直接添加进去，因为null是任何引用类型的子类

            System.out.println("通配符集合通过索引获取值："+list.get(0));    //null

            //将普通集合赋给通配符集合
            list = list1;
            list = list2;

            System.out.println("通配符集合通过索引获取值："+list.get(0));    //1

            //编译通过
            print(list);
        }

        public void print(List<?> list){    //
            Iterator<?> iterator = list.iterator();
            while(iterator.hasNext()){
                Object obj = iterator.next();
                System.out.println(obj);
            }
        }

}
